
/*
 * arch/arm/cpu/armv8/gxl/hdmitx20/hdmitx_tvenc.c
 *
 * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#include "mach_reg.h"
#include "hdmitx_tvenc.h"

#define MREG_END_MARKER 0xFFFF

static const struct reg_t tvregs_720p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_VENC_DVI_SETTING, 0x2029},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0019},
	{P_ENCP_VIDEO_YFP1_HTIME, 648},
	{P_ENCP_VIDEO_YFP2_HTIME, 3207},
	{P_ENCP_VIDEO_MAX_PXCNT, 3299},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 80},
	{P_ENCP_VIDEO_HSPULS_END, 240},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 80},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 688},
	{P_ENCP_VIDEO_VSPULS_END, 3248},
	{P_ENCP_VIDEO_VSPULS_BLINE, 4},
	{P_ENCP_VIDEO_VSPULS_ELINE, 8},
	{P_ENCP_VIDEO_HAVON_BEGIN, 648},
	{P_ENCP_VIDEO_HAVON_END, 3207},
	{P_ENCP_VIDEO_VAVON_BLINE, 29},
	{P_ENCP_VIDEO_VAVON_ELINE, 748},
	{P_ENCP_VIDEO_HSO_BEGIN, 256},
	{P_ENCP_VIDEO_HSO_END, 168},
	{P_ENCP_VIDEO_VSO_BEGIN, 168},
	{P_ENCP_VIDEO_VSO_END, 256},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_MAX_LNCNT, 749},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_720p_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x202d},
	{P_ENCP_VIDEO_MAX_PXCNT, 3959},
	{P_ENCP_VIDEO_MAX_LNCNT, 749},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 80},
	{P_ENCP_VIDEO_HSPULS_END, 240},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 80},
	{P_ENCP_VIDEO_HAVON_BEGIN, 648},
	{P_ENCP_VIDEO_HAVON_END, 3207},
	{P_ENCP_VIDEO_HSO_BEGIN, 128},
	{P_ENCP_VIDEO_HSO_END, 208},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 688},
	{P_ENCP_VIDEO_VSPULS_END, 3248},
	{P_ENCP_VIDEO_VSPULS_BLINE, 4},
	{P_ENCP_VIDEO_VSPULS_ELINE, 8},
	{P_ENCP_VIDEO_VAVON_BLINE, 29},
	{P_ENCP_VIDEO_VAVON_ELINE, 748},
	{P_ENCP_VIDEO_VSO_BEGIN, 128},
	{P_ENCP_VIDEO_VSO_END, 128},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 648},
	{P_ENCP_VIDEO_YFP2_HTIME, 3207},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0019},
	{P_ENCP_VIDEO_SYNC_MODE, 0x407},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_480i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCI_CFILT_CTRL, 0x12},
	{P_ENCI_CFILT_CTRL2, 0x12},
	{P_VENC_DVI_SETTING, 0},
	{P_ENCI_VIDEO_MODE, 0},
	{P_ENCI_VIDEO_MODE_ADV, 0},
	{P_ENCI_SYNC_HSO_BEGIN, 5},
	{P_ENCI_SYNC_HSO_END, 129},
	{P_ENCI_SYNC_VSO_EVNLN, 0x0003},
	{P_ENCI_SYNC_VSO_ODDLN, 0x0104},
	{P_ENCI_MACV_MAX_AMP, 0x810b},
	{P_VENC_VIDEO_PROG_MODE, 0xf0},
	{P_ENCI_VIDEO_MODE, 0x08},
	{P_ENCI_VIDEO_MODE_ADV, 0x26},
	{P_ENCI_VIDEO_SCH, 0x20},
	{P_ENCI_SYNC_MODE, 0x07},
	{P_ENCI_DBG_PX_RST, 0},
	{P_ENCI_VFIFO2VD_CTL, 0x4e01},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0xf3,},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x0693,},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x12,},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x102,},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x13,},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x103,},
	{P_VPU_VIU_VENC_MUX_CTRL, 0x5},
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_480p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x2052},
	{P_VENC_DVI_SETTING, 0x21},
	{P_ENCP_VIDEO_MODE, 0x4000},
	{P_ENCP_VIDEO_MODE_ADV, 9},
	{P_ENCP_VIDEO_YFP1_HTIME, 244},
	{P_ENCP_VIDEO_YFP2_HTIME, 1630},
	{P_ENCP_VIDEO_MAX_PXCNT, 1715},
	{P_ENCP_VIDEO_MAX_LNCNT, 524},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 0x22},
	{P_ENCP_VIDEO_HSPULS_END, 0xa0},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_VSPULS_END, 1589},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 5},
	{P_ENCP_VIDEO_HAVON_BEGIN, 249},
	{P_ENCP_VIDEO_HAVON_END, 1689},
	{P_ENCP_VIDEO_VAVON_BLINE, 42},
	{P_ENCP_VIDEO_VAVON_ELINE, 521},
	{P_ENCP_VIDEO_SYNC_MODE, 0x07},
	{P_VENC_VIDEO_PROG_MODE, 0x0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x3},
	{P_ENCP_VIDEO_HSO_END, 0x5},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x3},
	{P_ENCP_VIDEO_VSO_END, 0x5},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_SY_VAL, 8},
	{P_ENCP_VIDEO_SY2_VAL, 0x1d8},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_576i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0},
	{P_ENCI_VIDEO_MODE, 0},
	{P_ENCI_VIDEO_MODE_ADV, 0},
	{P_ENCI_SYNC_HSO_BEGIN, 3},
	{P_ENCI_SYNC_HSO_END, 129},
	{P_ENCI_SYNC_VSO_EVNLN, 0x0003},
	{P_ENCI_SYNC_VSO_ODDLN, 0x0104},
	{P_ENCI_MACV_MAX_AMP, 0x8107},
	{P_VENC_VIDEO_PROG_MODE, 0xff},
	{P_ENCI_VIDEO_MODE, 0x13},
	{P_ENCI_VIDEO_MODE_ADV, 0x26},
	{P_ENCI_VIDEO_SCH, 0x28},
	{P_ENCI_SYNC_MODE, 0x07},
	{P_ENCI_YC_DELAY, 0x333},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0x010b},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x06ab},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x0016},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x0136},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x0017},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x0137},
	{P_ENCI_DBG_PX_RST, 0},
	{P_ENCI_VFIFO2VD_CTL, 0x4e01},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0x010b},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x06ab},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x0016},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x0136},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x0017},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x0137},
	{P_VPU_VIU_VENC_MUX_CTRL, 0x5},
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_576p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x52},
	{P_VENC_DVI_SETTING, 0x21},
	{P_ENCP_VIDEO_MODE, 0x4000},
	{P_ENCP_VIDEO_MODE_ADV, 9},
	{P_ENCP_VIDEO_YFP1_HTIME, 235},
	{P_ENCP_VIDEO_YFP2_HTIME, 1674},
	{P_ENCP_VIDEO_MAX_PXCNT, 1727},
	{P_ENCP_VIDEO_MAX_LNCNT, 624},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_HSPULS_END, 0x80},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_VSPULS_END, 1599},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 235},
	{P_ENCP_VIDEO_HAVON_END, 1674},
	{P_ENCP_VIDEO_VAVON_BLINE, 44},
	{P_ENCP_VIDEO_VAVON_ELINE, 619},
	{P_ENCP_VIDEO_SYNC_MODE, 0x07},
	{P_VENC_VIDEO_PROG_MODE, 0x0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x80},
	{P_ENCP_VIDEO_HSO_END, 0x0},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x0},
	{P_ENCP_VIDEO_VSO_END, 0x5},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_SY_VAL, 8},
	{P_ENCP_VIDEO_SY2_VAL, 0x1d8},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_1080i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x2029},
	{P_ENCP_VIDEO_MAX_PXCNT, 4399},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 88},
	{P_ENCP_VIDEO_HSPULS_END, 264},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_HAVON_BEGIN, 516},
	{P_ENCP_VIDEO_HAVON_END, 4355},
	{P_ENCP_VIDEO_HSO_BEGIN, 264},
	{P_ENCP_VIDEO_HSO_END, 176},
	{P_ENCP_VIDEO_EQPULS_BEGIN, 2288},
	{P_ENCP_VIDEO_EQPULS_END, 2464},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 440},
	{P_ENCP_VIDEO_VSPULS_END, 2200},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 20},
	{P_ENCP_VIDEO_VAVON_ELINE, 559},
	{P_ENCP_VIDEO_VSO_BEGIN, 88},
	{P_ENCP_VIDEO_VSO_END, 88},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 516},
	{P_ENCP_VIDEO_YFP2_HTIME, 4355},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_OFLD_VOAV_OFST, 0x11},
	{P_ENCP_VIDEO_MODE, 0x5ffc},
	{P_ENCP_VIDEO_MODE_ADV, 0x0019},
	{P_ENCP_VIDEO_SYNC_MODE, 0x207},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_1080i_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x202d},
	{P_ENCP_VIDEO_MAX_PXCNT, 5279},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 88},
	{P_ENCP_VIDEO_HSPULS_END, 264},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_HAVON_BEGIN, 526},
	{P_ENCP_VIDEO_HAVON_END, 4365},
	{P_ENCP_VIDEO_HSO_BEGIN, 142},
	{P_ENCP_VIDEO_HSO_END, 230},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 440},
	{P_ENCP_VIDEO_VSPULS_END, 2200},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 20},
	{P_ENCP_VIDEO_VAVON_ELINE, 559},
	{P_ENCP_VIDEO_VSO_BEGIN, 142},
	{P_ENCP_VIDEO_VSO_END, 142},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 526},
	{P_ENCP_VIDEO_YFP2_HTIME, 4365},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_OFLD_VOAV_OFST, 0x11},
	{P_ENCP_VIDEO_MODE, 0x5ffc},
	{P_ENCP_VIDEO_MODE_ADV, 0x0019},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_1080p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1052},
	{P_VENC_DVI_SETTING, 0x0001},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 2060},
	{P_ENCP_VIDEO_MAX_PXCNT, 2199},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 2067},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100},
	{P_ENCP_VIDEO_VSO_END, 2164},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_1080p_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2639},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 271},
	{P_ENCP_VIDEO_HAVON_END, 2190},
	{P_ENCP_VIDEO_HSO_BEGIN, 79},
	{P_ENCP_VIDEO_HSO_END, 123},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_1080p_24hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1052},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2749},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 271},
	{P_ENCP_VIDEO_HAVON_END, 2190},
	{P_ENCP_VIDEO_HSO_BEGIN, 79},
	{P_ENCP_VIDEO_HSO_END, 123},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_30hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140+3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840+560-1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156+1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059+1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156+1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100+1920},
	{P_ENCP_VIDEO_VSO_END, 2164+1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_25hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140+3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840+1440-1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156+1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059+1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156+1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100+1920},
	{P_ENCP_VIDEO_VSO_END, 2164+1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_24hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140+3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840+1660-1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156+1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059+1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156+1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100+1920},
	{P_ENCP_VIDEO_VSO_END, 2164+1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_smpte[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140+3840+256},
	{P_ENCP_VIDEO_MAX_PXCNT, 4096+1404-1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156+1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059+1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987+256},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156+1920+256},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100+1920+256},
	{P_ENCP_VIDEO_VSO_END, 2164+1920+256},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_smpte_25hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x149F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_4k2k_smpte_30hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x112F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_vesa_640x480p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x31F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x20C,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x90,},
	{P_ENCP_VIDEO_HAVON_END, 0x30F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x202,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x60,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_800x600p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x41F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x273,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x3F7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x272,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x4,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_800x480p60hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x18},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3DF},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x1F3},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xA8},
	{P_ENCP_VIDEO_HAVON_END, 0x3C7},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x11},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x1F0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0},
	{P_ENCP_VIDEO_HSO_END, 0x48},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E},
	{P_ENCP_VIDEO_VSO_END, 0x32},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0},
	{P_ENCP_VIDEO_VSO_ELINE, 0x7},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_vesa_852x480p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3B3,},/*947//htotal-1*/
	{P_ENCP_VIDEO_MAX_LNCNT, 0x213,},/*531//vtotal-1*/
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x38,},/*56//hblank-hfront*/
	{P_ENCP_VIDEO_HAVON_END, 0x38B,},/*907//htotal-hfront-1*/
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},/*42//vblank-vfront*/
	{P_ENCP_VIDEO_VAVON_ELINE, 0x209,},/*521//vtotal-vfront-1*/
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x10,},/*16/hor sync time*/
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},/*2//ver sync time*/
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_854x480p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3B5,},/*949//htotal-1*/
	{P_ENCP_VIDEO_MAX_LNCNT, 0x212,},/*530//vtotal-1*/
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x38,},/*56//hblank-hfront*/
	{P_ENCP_VIDEO_HAVON_END, 0x38D,},/*909//htotal-hfront-1*/
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},/*41//vblank-vfront*/
	{P_ENCP_VIDEO_VAVON_ELINE, 0x208,},/*520//vtotal-vfront-1*/
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x10,},/*16//hor sync time*/
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},/*2//ver sync time*/
	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1024x600p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x53F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x27D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x128,},
	{P_ENCP_VIDEO_HAVON_END, 0x527,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x27A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x88,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1024x768p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x53F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x325,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x128,},
	{P_ENCP_VIDEO_HAVON_END, 0x527,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x322,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x88,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1152x864p75hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x63F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x383,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x180,},
	{P_ENCP_VIDEO_HAVON_END, 0x5FF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x382,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

#if 0
static const struct reg_t tvregs_vesa_1280x600p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x59F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x336,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0x56F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x14,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x333,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};
#endif

static const struct reg_t tvregs_vesa_1280x768p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x67F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x140,},
	{P_ENCP_VIDEO_HAVON_END, 0x63F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x31A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x7,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1280x800p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x59F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x336,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0x56F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x14,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x333,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1280x960p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x707,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3E7,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1A8,},
	{P_ENCP_VIDEO_HAVON_END, 0x6A7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x27,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3E6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1280x1024p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x697,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x429,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x168,},
	{P_ENCP_VIDEO_HAVON_END, 0x667,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x428,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1360x768p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x6FF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31A,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x170,},
	{P_ENCP_VIDEO_HAVON_END, 0x6BF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x18,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x317,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1366x768p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x6FF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x164,},
	{P_ENCP_VIDEO_HAVON_END, 0x6B9,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x31A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x8F,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1400x1050p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x747,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x440,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x178,},
	{P_ENCP_VIDEO_HAVON_END, 0x6EF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x24,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x43D,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x90,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x4,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1440x900p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x76F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3A5,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x180,},
	{P_ENCP_VIDEO_HAVON_END, 0x71F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1F,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3A2,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x98,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1600x900p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x707,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3E7,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xB0,},
	{P_ENCP_VIDEO_HAVON_END, 0x6EF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x63,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3E6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x50,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1600x1200p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x86F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4E1,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1F0,},
	{P_ENCP_VIDEO_HAVON_END, 0x82F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x31,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4E0,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC0,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1680x1050p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x8BF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x440,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1C8,},
	{P_ENCP_VIDEO_HAVON_END, 0x857,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x24,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x43D,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xB0,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_1920x1200p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA1F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4DC,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x218,},
	{P_ENCP_VIDEO_HAVON_END, 0x997,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D9,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC8,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};
static const struct reg_t tvregs_vesa_2160x1200p90hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x99D,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4BB,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0x8DF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x6,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4B5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCP_VIDEO_EN, 1},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_t tvregs_vesa_2560x1600p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xDAF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x679,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x2F0,},
	{P_ENCP_VIDEO_HAVON_END, 0xCEF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x37,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x676,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x118,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

#if 0 /* TODO */
static const struct reg_t tvregs_vesa_2560x1080p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA1F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4DC,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x218,},
	{P_ENCP_VIDEO_HAVON_END, 0x997,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D9,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC8,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},


	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_2560x1440p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA1F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4DC,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x218,},
	{P_ENCP_VIDEO_HAVON_END, 0x997,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D9,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC8,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},


	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};

static const struct reg_t tvregs_vesa_3440x1440p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA1F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4DC,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x218,},
	{P_ENCP_VIDEO_HAVON_END, 0x997,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D9,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC8,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},


	{P_VPU_VIU_VENC_MUX_CTRL, 0xA},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_EN, 1},
	{MREG_END_MARKER, 0}
};
#endif

struct vic_tvregs_set {
	enum hdmi_vic vic;
	const struct reg_t *reg_setting;
};

/* Using HDMI vic as index */
static struct vic_tvregs_set tvregsTab[] = {
	{HDMI_720x480i60_16x9, tvregs_480i},
	{HDMI_2880x480i60_16x9, tvregs_480i},
	{HDMI_720x480p60_16x9, tvregs_480p},
	{HDMI_2880x240p60_16x9, tvregs_480p},
	{HDMI_720x576i50_16x9, tvregs_576i},
	{HDMI_2880x576i50_16x9, tvregs_576i},
	{HDMI_720x576p50_16x9, tvregs_576p},
	{HDMI_2880x576p50_16x9, tvregs_576p},
	{HDMI_1280x720p60_16x9, tvregs_720p},
	{HDMI_1920x1080i60_16x9, tvregs_1080i},
	{HDMI_1920x1080p60_16x9, tvregs_1080p},
	{HDMI_1920x1080p30_16x9, tvregs_1080p},
	{HDMI_1280x720p50_16x9, tvregs_720p_50hz},
	{HDMI_1920x1080i50_16x9, tvregs_1080i_50hz},
	{HDMI_1920x1080p50_16x9, tvregs_1080p_50hz},
	{HDMI_1920x1080p25_16x9, tvregs_1080p_50hz},
	{HDMI_1920x1080p24_16x9, tvregs_1080p_24hz},
	{HDMI_3840x2160p30_16x9, tvregs_4k2k_30hz},
	{HDMI_3840x2160p25_16x9, tvregs_4k2k_25hz},
	{HDMI_3840x2160p24_16x9, tvregs_4k2k_24hz},
	{HDMI_4096x2160p24_256x135, tvregs_4k2k_smpte},
	{HDMI_4096x2160p25_256x135, tvregs_4k2k_smpte_25hz},
	{HDMI_4096x2160p30_256x135, tvregs_4k2k_smpte_30hz},
	{HDMI_4096x2160p50_256x135, tvregs_4k2k_smpte_25hz},
	{HDMI_4096x2160p60_256x135, tvregs_4k2k_smpte_30hz},
	{HDMI_4096x2160p50_256x135_Y420, tvregs_4k2k_smpte_25hz},
	{HDMI_4096x2160p60_256x135_Y420, tvregs_4k2k_smpte_30hz},
	{HDMI_3840x2160p60_16x9, tvregs_4k2k_30hz},
	{HDMI_3840x2160p50_16x9, tvregs_4k2k_25hz},
	{HDMI_3840x2160p60_16x9_Y420, tvregs_4k2k_30hz},
	{HDMI_3840x2160p50_16x9_Y420, tvregs_4k2k_25hz},
	{HDMIV_640x480p60hz, tvregs_vesa_640x480p60hz},
	{HDMIV_800x480p60hz, tvregs_vesa_800x480p60hz},
	{HDMIV_800x600p60hz, tvregs_vesa_800x600p60hz},
	{HDMIV_852x480p60hz, tvregs_vesa_852x480p60hz},
	{HDMIV_854x480p60hz, tvregs_vesa_854x480p60hz},
	{HDMIV_1024x600p60hz, tvregs_vesa_1024x600p60hz},
	{HDMIV_1024x768p60hz, tvregs_vesa_1024x768p60hz},
	{HDMIV_1152x864p75hz, tvregs_vesa_1152x864p75hz},
#if 0
	{HDMIV_1280x600p60hz, tvregs_vesa_1280x600p60hz},
#endif
	{HDMIV_1280x768p60hz, tvregs_vesa_1280x768p60hz},
	{HDMIV_1280x800p60hz, tvregs_vesa_1280x800p60hz},
	{HDMIV_1280x960p60hz, tvregs_vesa_1280x960p60hz},
	{HDMIV_1280x1024p60hz, tvregs_vesa_1280x1024p60hz},
	{HDMIV_1360x768p60hz, tvregs_vesa_1360x768p60hz},
	{HDMIV_1366x768p60hz, tvregs_vesa_1366x768p60hz},
	{HDMIV_1400x1050p60hz, tvregs_vesa_1400x1050p60hz},
	{HDMIV_1440x900p60hz, tvregs_vesa_1440x900p60hz},
	{HDMIV_1600x900p60hz, tvregs_vesa_1600x900p60hz},
	{HDMIV_1600x1200p60hz, tvregs_vesa_1600x1200p60hz},
	{HDMIV_1680x1050p60hz, tvregs_vesa_1680x1050p60hz},
	{HDMIV_1920x1200p60hz, tvregs_vesa_1920x1200p60hz},
	{HDMIV_2160x1200p90hz, tvregs_vesa_2160x1200p90hz},
	{HDMIV_2560x1600p60hz, tvregs_vesa_2560x1600p60hz},
};

static inline void setreg(const struct reg_t *r)
{
	hd_write_reg(r->reg, r->val);
	/* printk("[0x%x] = 0x%x\n", r->reg, r->val); */
}

static const struct reg_t *tvregs_setting_mode(enum hdmi_vic vic)
{
	int i = 0;
	for (i = 0; i < ARRAY_SIZE(tvregsTab); i++) {
		if (vic == tvregsTab[i].vic)
			return tvregsTab[i].reg_setting;
	}
	return NULL;
}

void set_vmode_enc_hw(enum hdmi_vic vic)
{
	const struct reg_t *s = tvregs_setting_mode(vic);

	if (s) {
		pr_info("hdmitx: set enc for VIC: %d\n", vic);
		while (MREG_END_MARKER != s->reg)
			setreg(s++);
	} else
		pr_info("hdmitx: not find VIC: %d\n", vic);
}
